package com.example.myweather.modelo;

import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import android.util.Log;

public class XMLParser {
	
	public String getNodeValue(String xml,String rootNode,String value){
		
		try{
		Document doc = this.getDomElement(xml);		
		
		NodeList nl = doc.getElementsByTagName(rootNode);
		
		Element e = (Element) nl.item(0);
		
		String name = this.getValue(e, value); // name child value
		
		return name;
		
		}catch(Exception e){
			Log.d("XML Parse Error",e.getMessage());
			return null;
		}
	}
	
	private Document getDomElement(String xml){
		Document doc = null;
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
				
			DocumentBuilder db = dbf.newDocumentBuilder();
				
			InputSource is = new InputSource();
				
			is.setCharacterStream(new StringReader(xml));
	
			doc = db.parse(is); 
			
			
			} catch (ParserConfigurationException e) {
				Log.e("Error: ParserConfigurationException", e.getMessage());
				return null;
			} catch (SAXException e) {
				Log.e("Error SAXException: ", e.getMessage());
	            return null;
			} catch (IOException e) {
				Log.e("Error IOExceptio: ", e.getMessage());
				return null;
			}
                // return DOM
	        return doc;
	}
	
	
	
	private String getValue(Element item, String str) {
		NodeList n = item.getElementsByTagName(str);
		return this.getElementValue(n.item(0));
	}

	
	private final String getElementValue( Node elem ) {
		     Node child;
		     if( elem != null){
		         if (elem.hasChildNodes()){
		             for( child = elem.getFirstChild(); child != null; child = child.getNextSibling() ){
		                 if( child.getNodeType() == Node.TEXT_NODE  ){
		                     return child.getNodeValue();
		                 }
		             }
		         }
		     }
		     return "";
	  }	
	
}
